const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');

// 获取Git信息
function getGitVersion() {
  try {
    // 获取最新标签
    let tag = '';
    try {
      tag = execSync('git describe --tags --abbrev=0').toString().trim();
    } catch (e) {
      tag = 'v0.0.0'; // 如果没有标签，使用默认值
    }
    
    // 获取提交计数
    const commitCount = execSync('git rev-list --count HEAD').toString().trim();
    
    // 获取提交哈希
    const hash = execSync('git rev-parse --short HEAD').toString().trim();
    
    // 处理标签格式，确保符合语义化版本规范
    let formattedTag = tag;
    if (!formattedTag.startsWith('v')) {
      formattedTag = `v${tag}`;
    }

    // 格式化最终版本号
    const version = `${formattedTag}.${commitCount}`;
    
    return {
      version,
      hash,
      buildDate: new Date().toISOString(),
      rawTag: formattedTag // 保存原始标签值（不带提交计数）
    };
  } catch (error) {
    console.error('获取Git版本信息失败:', error);
    return { version: 'v0.0.0', hash: 'unknown', buildDate: new Date().toISOString(), rawTag: 'v0.0.0' };
  }
}

// 生成版本文件
const versionInfo = getGitVersion();
const outputPath = path.resolve(__dirname, '../src/version.js');

fs.writeFileSync(
  outputPath,
  `// 此文件由脚本自动生成，请勿手动修改
export const VERSION = '${versionInfo.version}';
export const GIT_HASH = '${versionInfo.hash}';
export const BUILD_DATE = '${versionInfo.buildDate}';
export const GIT_TAG = '${versionInfo.rawTag}';
`,
  'utf-8'
);

console.log(`版本信息已生成: ${versionInfo.version} (${versionInfo.hash})`);

// 自动更新版本历史
function updateVersionHistory() {
  try {
    const versionHistoryPath = path.resolve(__dirname, '../src/data/versionHistory.js');
    
    // 确保文件存在
    if (!fs.existsSync(versionHistoryPath)) {
      console.log('版本历史文件不存在，跳过更新');
      return;
    }
    
    let historyContent = fs.readFileSync(versionHistoryPath, 'utf-8');
    
    // 检查版本历史中是否已包含此标签
    if (historyContent.includes(`"${versionInfo.rawTag}"`)) {
      console.log(`版本历史已包含最新标签 ${versionInfo.rawTag}，无需更新`);
      return;
    }
    
    // 准备当前日期
    const today = new Date().toLocaleDateString('zh-CN', { 
      year: 'numeric', month: '2-digit', day: '2-digit' 
    }).replace(/\//g, '年').replace(/(\d+)\/(\d+)$/, '$1月$2日');
    
    // 替换auto版本
    historyContent = historyContent.replace(
      /(createVersion\("auto",)[^,]+(,[^\[]+\[)/,
      `$1 "${versionInfo.rawTag}"$2`
    );
    
    // 在顶部添加新的空白auto版本
    historyContent = historyContent.replace(
      /(export const versionHistory = \[)/,
      `$1
  createVersion("auto", "${today}", "版本更新", [
    // 在此添加新版本的更新内容
  ]),
`
    );
    
    // 写入更新后的文件
    fs.writeFileSync(versionHistoryPath, historyContent, 'utf-8');
    console.log(`版本历史已更新：将当前版本固定为 ${versionInfo.rawTag} 并添加了新的auto版本条目`);
    
  } catch (error) {
    console.error('更新版本历史时出错:', error);
  }
}

// 执行版本历史更新
updateVersionHistory();